home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK2.toast / Development Kits (Disc 2) / TEC 1.2.1 / Headers & Libs / Interfaces / Unicode.h < prev   
Encoding:
C/C++ Source or Header  |  1997-11-18  |  12.2 KB  |  280 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Unicode.h
  3.  
  4.      Contains:    Types, constants, and prototypes for Unicode Converter
  5.  
  6.      Copyright:    © 1984-1997 by Apple Computer, Inc.
  7.                  All rights reserved.
  8.  
  9. */
  10. #ifndef __UNICODE__
  11. #define __UNICODE__
  12.  
  13. #ifndef __TYPES__
  14. #include <Types.h>
  15. #endif
  16. #ifndef __TEXTCOMMON__
  17. #include <TextCommon.h>
  18. #endif
  19. #ifndef __MIXEDMODE__
  20. #include <MixedMode.h>
  21. #endif
  22.  
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. #if PRAGMA_IMPORT_SUPPORTED
  28. #pragma import on
  29. #endif
  30.  
  31. #if PRAGMA_ALIGN_SUPPORTED
  32. #pragma options align=mac68k
  33. #endif
  34.  
  35. /* Unicode conversion contexts: */
  36. typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
  37. typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
  38. typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
  39. typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
  40. typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
  41. /* UnicodeMapVersion type & values */
  42. typedef SInt32 UnicodeMapVersion;
  43.  
  44. enum {
  45.     kUnicodeUseLatestMapping    = -1
  46. };
  47.  
  48. /* Types used in conversion */
  49. struct UnicodeMapping {
  50.     TextEncoding                     unicodeEncoding;
  51.     TextEncoding                     otherEncoding;
  52.     UnicodeMapVersion                 mappingVersion;
  53. };
  54. typedef struct UnicodeMapping UnicodeMapping;
  55.  
  56. typedef UnicodeMapping *UnicodeMappingPtr;
  57. typedef const UnicodeMapping *ConstUnicodeMappingPtr;
  58. /* Control flags for ConvertFromUnicodeToText and ConvertFromTextToUnicode */
  59.  
  60. enum {
  61.     kUnicodeUseFallbacksBit        = 0,
  62.     kUnicodeKeepInfoBit            = 1,
  63.     kUnicodeDirectionalityBits    = 2,
  64.     kUnicodeVerticalFormBit        = 4,
  65.     kUnicodeLooseMappingsBit    = 5,
  66.     kUnicodeStringUnterminatedBit = 6,
  67.     kUnicodeTextRunBit            = 7,
  68.     kUnicodeKeepSameEncodingBit    = 8
  69. };
  70.  
  71.  
  72. enum {
  73.     kUnicodeUseFallbacksMask    = 1L << kUnicodeUseFallbacksBit,
  74.     kUnicodeKeepInfoMask        = 1L << kUnicodeKeepInfoBit,
  75.     kUnicodeDirectionalityMask    = 3L << kUnicodeDirectionalityBits,
  76.     kUnicodeVerticalFormMask    = 1L << kUnicodeVerticalFormBit,
  77.     kUnicodeLooseMappingsMask    = 1L << kUnicodeLooseMappingsBit,
  78.     kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  79.     kUnicodeTextRunMask            = 1L << kUnicodeTextRunBit,
  80.     kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
  81. };
  82.  
  83. /* Values for kUnicodeDirectionality field */
  84.  
  85. enum {
  86.     kUnicodeDefaultDirection    = 0,
  87.     kUnicodeLeftToRight            = 1,
  88.     kUnicodeRightToLeft            = 2
  89. };
  90.  
  91. /* Directionality masks for control flags */
  92.  
  93. enum {
  94.     kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
  95.     kUnicodeLeftToRightMask        = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
  96.     kUnicodeRightToLeftMask        = kUnicodeRightToLeft << kUnicodeDirectionalityBits
  97. };
  98.  
  99. /* Control flags for TruncateForUnicodeToText: */
  100. /*
  101.  Now TruncateForUnicodeToText uses control flags from the same set as used by
  102.  ConvertFromTextToUnicode, ConvertFromUnicodeToText, etc., but only
  103.  kUnicodeStringUnterminatedMask is meaningful for TruncateForUnicodeToText.
  104.  
  105.  Previously two special control flags were defined for TruncateForUnicodeToText:
  106.         kUnicodeTextElementSafeBit = 0
  107.         kUnicodeRestartSafeBit = 1
  108.  However, neither of these was implemented.
  109.  Instead of implementing kUnicodeTextElementSafeBit, we now use
  110.  kUnicodeStringUnterminatedMask since it accomplishes the same thing and avoids
  111.  having special flags just for TruncateForUnicodeToText
  112.  Also, kUnicodeRestartSafeBit is unnecessary, since restart-safeness is handled by
  113.  setting kUnicodeKeepInfoBit with ConvertFromUnicodeToText.
  114.  If TruncateForUnicodeToText is called with one or both of the old special control
  115.  flags set (bits 0 or 1), it will not generate a paramErr, but the old bits have no
  116.  effect on its operation.
  117. */
  118. /* Filter bits for filter field in QueryUnicodeMappings and CountUnicodeMappings: */
  119.  
  120. enum {
  121.     kUnicodeMatchUnicodeBaseBit    = 0,
  122.     kUnicodeMatchUnicodeVariantBit = 1,
  123.     kUnicodeMatchUnicodeFormatBit = 2,
  124.     kUnicodeMatchOtherBaseBit    = 3,
  125.     kUnicodeMatchOtherVariantBit = 4,
  126.     kUnicodeMatchOtherFormatBit    = 5
  127. };
  128.  
  129.  
  130. enum {
  131.     kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  132.     kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  133.     kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  134.     kUnicodeMatchOtherBaseMask    = 1L << kUnicodeMatchOtherBaseBit,
  135.     kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  136.     kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
  137. };
  138.  
  139. /* Control flags for SetFallbackUnicodeToText */
  140.  
  141. enum {
  142.     kUnicodeFallbackSequencingBits = 0
  143. };
  144.  
  145.  
  146. enum {
  147.     kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
  148. };
  149.  
  150. /* values for kUnicodeFallbackSequencing field */
  151.  
  152. enum {
  153.     kUnicodeFallbackDefaultOnly    = 0L,
  154.     kUnicodeFallbackCustomOnly    = 1L,
  155.     kUnicodeFallbackDefaultFirst = 2L,
  156.     kUnicodeFallbackCustomFirst    = 3L
  157. };
  158.  
  159. /* Caller-supplied entry point to a fallback handler */
  160. typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount *oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount *oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr);
  161.  
  162. #if GENERATINGCFM
  163. typedef UniversalProcPtr UnicodeToTextFallbackUPP;
  164. #else
  165. typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
  166. #endif
  167.  
  168. enum {
  169.     uppUnicodeToTextFallbackProcInfo = kPascalStackBased
  170.          | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  171.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
  172.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
  173.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
  174.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TextPtr)))
  175.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
  176.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
  177.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
  178.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
  179. };
  180.  
  181. #if GENERATINGCFM
  182. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  183.         (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
  184. #else
  185. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  186.         ((UnicodeToTextFallbackUPP) (userRoutine))
  187. #endif
  188.  
  189. #if GENERATINGCFM
  190. #define CallUnicodeToTextFallbackProc(userRoutine, iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr)        \
  191.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (iSrcUniStr), (iSrcUniStrLen), (oSrcConvLen), (oDestStr), (iDestStrLen), (oDestConvLen), (iInfoPtr), (iUnicodeMappingPtr))
  192. #else
  193. #define CallUnicodeToTextFallbackProc(userRoutine, iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr)        \
  194.         (*(userRoutine))((iSrcUniStr), (iSrcUniStrLen), (oSrcConvLen), (oDestStr), (iDestStrLen), (oDestConvLen), (iInfoPtr), (iUnicodeMappingPtr))
  195. #endif
  196. /* Function prototypes */
  197. #if GENERATING68K && !GENERATINGCFM
  198. /*
  199.     Routine to Initialize the Unicode Converter and cleanup once done with it. 
  200.     These routines must be called from Static Library clients. 
  201. */
  202. extern pascal OSStatus InitializeUnicode(StringPtr TECFileName);
  203.  
  204. extern pascal void TerminateUnicode(void );
  205.  
  206. #endif
  207. extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr iUnicodeMapping, TextToUnicodeInfo *oTextToUnicodeInfo);
  208.  
  209. extern pascal OSStatus CreateTextToUnicodeInfoByEncoding(TextEncoding iEncoding, TextToUnicodeInfo *oTextToUnicodeInfo);
  210.  
  211. extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr iUnicodeMapping, UnicodeToTextInfo *oUnicodeToTextInfo);
  212.  
  213. extern pascal OSStatus CreateUnicodeToTextInfoByEncoding(TextEncoding iEncoding, UnicodeToTextInfo *oUnicodeToTextInfo);
  214.  
  215. extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount iNumberOfMappings, const UnicodeMapping iUnicodeMappings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  216.  
  217. extern pascal OSStatus CreateUnicodeToTextRunInfoByEncoding(ItemCount iNumberOfEncodings, const TextEncoding iEncodings[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  218.  
  219. extern pascal OSStatus CreateUnicodeToTextRunInfoByScriptCode(ItemCount iNumberOfScriptCodes, const ScriptCode iScripts[], UnicodeToTextRunInfo *oUnicodeToTextInfo);
  220.  
  221. /* Change the TextToUnicodeInfo to another mapping. */
  222. extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  223.  
  224. /* Change the UnicodeToTextInfo to another mapping. */
  225. extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo, ConstUnicodeMappingPtr iUnicodeMapping);
  226.  
  227. extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *ioTextToUnicodeInfo);
  228.  
  229. extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *ioUnicodeToTextInfo);
  230.  
  231. extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *ioUnicodeToTextRunInfo);
  232.  
  233. extern pascal OSStatus ConvertFromTextToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oSourceRead, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  234.  
  235. extern pascal OSStatus ConvertFromUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr);
  236.  
  237. extern pascal OSStatus ConvertFromUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iEncodingRunBufLen, ItemCount *oEncodingRunOutLen, TextEncodingRun oEncodingRuns[]);
  238.  
  239. extern pascal OSStatus ConvertFromUnicodeToScriptCodeRun(UnicodeToTextRunInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, OptionBits iControlFlags, ItemCount iOffsetCount, ByteOffset iOffsetArray[], ItemCount *oOffsetCount, ByteOffset oOffsetArray[], ByteCount iOutputBufLen, ByteCount *oInputRead, ByteCount *oOutputLen, LogicalAddress oOutputStr, ItemCount iScriptRunBufLen, ItemCount *oScriptRunOutLen, ScriptCodeRun oScriptCodeRuns[]);
  240.  
  241. /* Truncate a multibyte string at a safe place. */
  242. extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo iTextToUnicodeInfo, ByteCount iSourceLen, ConstLogicalAddress iSourceStr, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  243.  
  244. /* Truncate a Unicode string at a safe place. */
  245. extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo iUnicodeToTextInfo, ByteCount iSourceLen, ConstUniCharArrayPtr iSourceStr, OptionBits iControlFlags, ByteCount iMaxLen, ByteCount *oTruncatedLen);
  246.  
  247. /* Convert a Pascal string to Unicode string. */
  248. extern pascal OSStatus ConvertFromPStringToUnicode(TextToUnicodeInfo iTextToUnicodeInfo, ConstStr255Param iPascalStr, ByteCount iOutputBufLen, ByteCount *oUnicodeLen, UniCharArrayPtr oUnicodeStr);
  249.  
  250. /* Convert a Unicode string to Pascal string. */
  251. extern pascal OSStatus ConvertFromUnicodeToPString(UnicodeToTextInfo iUnicodeToTextInfo, ByteCount iUnicodeLen, ConstUniCharArrayPtr iUnicodeStr, Str255 oPascalStr);
  252.  
  253. /* Count the available conversion mappings. */
  254. extern pascal OSStatus CountUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount *oActualCount);
  255.  
  256. /* Get a list of the available conversion mappings. */
  257. extern pascal OSStatus QueryUnicodeMappings(OptionBits iFilter, ConstUnicodeMappingPtr iFindMapping, ItemCount iMaxCount, ItemCount *oActualCount, UnicodeMapping oReturnedMappings[]);
  258.  
  259. /* Setup the fallback handler for converting Unicode To Text. */
  260. extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo iUnicodeToTextInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  261.  
  262. /* Setup the fallback handler for converting Unicode To TextRuns. */
  263. extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo iUnicodeToTextRunInfo, UnicodeToTextFallbackUPP iFallback, OptionBits iControlFlags, LogicalAddress iInfoPtr);
  264.  
  265.  
  266. #if PRAGMA_ALIGN_SUPPORTED
  267. #pragma options align=reset
  268. #endif
  269.  
  270. #if PRAGMA_IMPORT_SUPPORTED
  271. #pragma import off
  272. #endif
  273.  
  274. #ifdef __cplusplus
  275. }
  276. #endif
  277.  
  278. #endif /* __UNICODE__ */
  279.  
  280.